<?php
class cotizaciones_model extends CI_Model{
	
	function __construct(){
		parent::__construct();
	}
	
	/**
	 * Obtiene el listado de cotizaciones
	 */
	public function getCotizaciones(){
		$sql = '';
		//paginacion
		$params = array(
				'result_items_per_page' => '30',
				'result_page' => (isset($_GET['pag'])? $_GET['pag']: 0)
		);
		if($params['result_page'] % $params['result_items_per_page'] == 0)
			$params['result_page'] = ($params['result_page']/$params['result_items_per_page']);
		
		//Filtros para buscar
		if($this->input->get('ffecha1') != '' && $this->input->get('ffecha2') != '')
			$sql = " AND Date(c.fecha) BETWEEN '".$this->input->get('ffecha1')."' AND '".$this->input->get('ffecha2')."'";
		elseif($this->input->get('ffecha1') != '')
			$sql = " AND Date(c.fecha) = '".$this->input->get('ffecha1')."'";
		elseif($this->input->get('ffecha2') != '')
			$sql = " AND Date(c.fecha) = '".$this->input->get('ffecha2')."'";
		if($this->input->get('ffolio') != '')
			$sql .= " AND c.folio = '".$this->input->get('ffolio')."'";
		if($this->input->get('fid_cliente') != '')
			$sql .= " AND cs.id_sucursal = '".$this->input->get('fid_cliente')."'";
		
		$query = BDUtil::pagination("
				SELECT c.id_cotizacion, Date(c.fecha) AS fecha, c.serie, c.folio, cs.nombre_fiscal, c.status, 
					(e.apellido_paterno || ' ' || e.apellido_materno || ' ' || e.nombre) AS nombre_vendedor
				FROM cotizaciones AS c 
					INNER JOIN clientes_sucursales AS cs ON cs.id_sucursal = c.id_cliente
					INNER JOIN empleados AS e ON e.id_empleado = c.id_vendedor
				WHERE c.status <> 'e'".$sql."
				ORDER BY (Date(c.fecha), c.folio) DESC
				", $params, true);
		$res = $this->db->query($query['query']);
		
		$response = array(
				'cotiza' => array(),
				'total_rows' 		=> $query['total_rows'],
				'items_per_page' 	=> $params['result_items_per_page'],
				'result_page' 		=> $params['result_page']
		);
		if($res->num_rows() > 0)
			$response['cotiza'] = $res->result();
		
		return $response;
	}
	
	/**
	 * Obtiene la informacion de una cotizacion
	 */
	public function getInfoCotizacion($id, $info_basic=false){
		$res = $this->db
			->select('*')
			->from('cotizaciones')
			->where("id_cotizacion = '".$id."'")
		->get();
		if($res->num_rows() > 0){
			$response['info'] = $res->row();
			$response['info']->fecha = substr($response['info']->fecha, 0, 10);
			$res->free_result();
			if($info_basic)
				return $response;
			
			$this->load->model('clientes_model');
			$prov = $this->clientes_model->getInfoCliente($response['info']->id_cliente, false);
			$response['info']->cliente = $prov['info']->nombre_fiscal;
			$response['info']->cliente_dias_credito = $prov['info']->dias_credito;
			$response['info']->cliente_info .= $prov['info']->calle!=''? $prov['info']->calle: '';
			$response['info']->cliente_info .= $prov['info']->no_exterior!=''? ' #'.$prov['info']->no_exterior: '';
			$response['info']->cliente_info .= $prov['info']->no_interior!=''? '-'.$prov['info']->no_interior: '';
			$response['info']->cliente_info .= $prov['info']->colonia!=''? ', '.$prov['info']->colonia: '';
			$response['info']->cliente_info .= "\n".($prov['info']->localidad!=''? $prov['info']->localidad: '');
			$response['info']->cliente_info .= $prov['info']->municipio!=''? ', '.$prov['info']->municipio: '';
			$response['info']->cliente_info .= $prov['info']->estado!=''? ', '.$prov['info']->estado: '';
			$response['info']->cliente_info .= "\n".$prov['info']->telefono!=''? ', Tel. '.$prov['info']->telefono: '';
			$response['info']->cliente_all   = $prov['info'];
			$response['info']->cliente_contac  = isset($prov['contactos'])? $prov['contactos']: array();
			
			$this->load->model('empleados_model');
			$prov = $this->empleados_model->getInfoEmpleado($response['info']->id_vendedor, true);
			$response['info']->nombre_vendedor = $prov['info']->apellido_paterno.' '.$prov['info']->apellido_materno.' '.$prov['info']->nombre;
			
			//productos
			$res = $this->db
				->select('p.id_producto, p.codigo, p.nombre, cp.taza_iva, cp.cantidad, cp.precio_unitario, 
						cp.importe, cp.importe_iva, cp.total')
				->from('cotizaciones_productos AS cp')
					->join('productos AS p', 'p.id_producto = cp.id_producto', 'inner')
				->where("cp.id_cotizacion = '".$id."'")
			->get();
			if($res->num_rows() > 0){
				$response['productos'] = $res->result();
			}
			$res->free_result();
			
			return $response;
		}else
			return false;
	}
	
	/**
	 * Obtiene el folio que se le asignara a la cotizacion, el consecutivo
	 */
	public function getFolioCotiza(){
		$res = $this->db->query("SELECT get_folio_cotizacion();");
		$data = $res->row();
		return $data->get_folio_cotizacion;
	}
	
	/**
	 * Agrega una cotizacion a la bd
	 */
	public function addCotizacion(){
		$id_cotiza = BDUtil::getId();
		$data = array(
			'id_cotizacion' => $id_cotiza,
			'id_cliente' => $this->input->post('did_cliente'),
			'id_vendedor' =>$this->input->post('did_vendedor'),
			'id_usuario' => $_SESSION['id_empleado'],
			'serie' => $this->input->post('dserie'),
			'folio' => $this->input->post('dfolio'),
			'fecha' => $this->input->post('dfecha'),
			'subtotal' => $this->input->post('dtsubtotal'),
			'importe_iva' => $this->input->post('dtiva'),
			'total' => $this->input->post('dttotal')
		);
		$this->db->insert('cotizaciones', $data);
		
		//productos para las cotizaciones
		if(isset($_POST['dpid_producto'])){
			$this->addProductos($id_cotiza);
		}
		
		return array(true, '', $id_cotiza);
	}
	
	/**
	 * Cancela una cotizacion, la elimina
	 */
	public function cancelaCotizacion(){
		$this->db->update('cotizaciones', array('status' => 'e'), "id_cotizacion = '".$_GET['id']."'");
		return array(true, '');
	}
	
	
	/**
	 * Agrega los productos a una cotizacion
	 * @param unknown_type $id_cotiza
	 * @param unknown_type $tipo
	 */
	public function addProductos($id_cotiza, $tipo='add'){
		if(is_array($_POST['dpid_producto'])){
			$data_productos = array();
			foreach($_POST['dpid_producto'] as $key => $producto){
				//Datos de los productos de la cotizacion
				$data_productos[] = array(
					'id_cotizacion' => $id_cotiza,
					'id_producto' => $producto,
					'taza_iva' => $_POST['dptaza_iva'][$key],
					'cantidad' => $_POST['dpcantidad'][$key],
					'precio_unitario' => $_POST['dpprecio_unitario'][$key],
					'importe' => $_POST['dpimporte'][$key],
					'importe_iva' => $_POST['dpimporte_iva'][$key],
					'total' => ($_POST['dpimporte'][$key]+$_POST['dpimporte_iva'][$key]),
				);
			}

			if(count($data_productos) > 0){
				if($tipo != 'add' && $this->input->post('dpupdate') == 'si'){
					$this->db->delete('cotizaciones_productos', "id_cotizacion = '".$id_cotiza."'");
				}
				//se insertan los productos de la cotizacion	
				$this->db->insert_batch('cotizaciones_productos', $data_productos);
			}
			
			return array(true, '');
		}
		return array(false, '');
	}

	public function imprimirCotizacion($id, $tipo_output='I'){
		//Cotizacion
		$res = $this->db
			->select('id_cotizacion, id_cliente, id_vendedor, serie, folio, Date(fecha) AS fecha, subtotal')
			->from('cotizaciones')
			->where("id_cotizacion = '".$id."'")
		->get();
		$data_cotiza = $res->row();
		$res->free_result();
		
		//productos
		$res = $this->db
			->select('p.id_producto, p.codigo, p.nombre, cp.taza_iva, cp.cantidad, cp.precio_unitario,
				cp.importe, cp.importe_iva, cp.total')
			->from('cotizaciones_productos AS cp')
				->join('productos AS p', 'p.id_producto = cp.id_producto', 'inner')
			->where("cp.id_cotizacion = '".$id."'")
			->get();
		$data_productos = $res->result();
		$res->free_result();
		
		//cliente
		$res = $this->db
			->select("cs.id_sucursal, cs.nombre_fiscal, (CASE cs.telefono WHEN '' THEN csc.celular ELSE cs.telefono END) AS telefono, 
					csc.nombre, csc.puesto, cs.calle, cs.no_exterior, cs.no_interior, cs.colonia, cs.localidad, cs.municipio, 
					cs.estado, cs.cp")
			->from('clientes_sucursales AS cs')
				->join('clientes_sucursales_contacto as csc', 'cs.id_sucursal = csc.id_sucursal', 'LEFT')
			->where("cs.id_sucursal = '".$data_cotiza->id_cliente."'")
			->order_by('csc.id_contacto', 'ASC')
			->limit(1)
		->get();
		$data_cliente = $res->row();
		$res->free_result();
		
		
		$this->load->library('mypdf');
		// Creación del objeto de la clase heredada
		$pdf = new MYpdf('P', 'mm', 'Letter');
		$pdf->show_head = false;
		$pdf->AddPage();
		$pdf->SetFont('Arial','',8);
		
		if(isset($_GET['membrete']))
			$pdf->Image(APPPATH.'images/h_memb.jpg', .5, 0, 215, 279);
		
		$limite_y = 242;
		$y = 40;
		$pdf->SetXY(188, $y);
		$pdf->Cell(20, 6, $data_cotiza->fecha, 0, 0, 'R');
		$pdf->SetXY(20, ($y += 5));
		$pdf->Cell(150, 6, 'MON-154-SCFI-2005 No. DICTAMEN UV: 3RS0076', 0, 0, 'C');
		$pdf->SetX(168);
		$pdf->Cell(40, 6, 'Cot: '.($data_cotiza->serie!=''? $data_cotiza->serie.'-': '').$data_cotiza->folio, 0, 0, 'R');
		
		$pdf->SetFont('Arial','B',9);
		$pdf->SetXY(6, ($y += 8));
		$pdf->Cell(200, 6, $data_cliente->nombre_fiscal, 0, 0, 'L');
		$pdf->SetFont('Arial','',9);
		$pdf->SetXY(6, ($y += 5));
		$pdf->Cell(200, 6, $data_cliente->calle.' No. '.$data_cliente->no_exterior.
											($data_cliente->no_interior!=''? '-'.$data_cliente->no_interior:'').', '.
											$data_cliente->colonia, 0, 0, 'L');
		$pdf->SetXY(6, ($y += 5));
		$pdf->Cell(200, 6, ($data_cliente->localidad!=''? $data_cliente->localidad.', ' :'').
											$data_cliente->municipio.', '.$data_cliente->estado, 0, 0, 'L');
		$pdf->SetXY(6, ($y += 5));
		$pdf->Cell(200, 6, 'CP. '.$data_cliente->cp.', Tel. '.$data_cliente->telefono, 0, 0, 'L');
		
		$pdf->SetXY(6, ($y += 8));
		$pdf->Cell(200, 6, 'AT\'N '.$data_cliente->nombre.($data_cliente->puesto!=''? ', '.$data_cliente->puesto: ''), 0, 0, 'L');

		$pdf->SetXY(6, ($y += 5));
		//$pdf->Cell(40, 6, "AT'N", 0, 0, 'L');
		//$pdf->SetXY(8, ($y += 10));
		$pdf->MultiCell(200, 5, "     Por medio de la presente ponemos a su consideración la presente cotización que en área de seguridad y protección personal nos solicitaron amablemente:", 0, 'L');
		
		$aligns = array('C', 'C', 'C', 'C');
		$widths = array(25, 109, 33, 33);
		$header = array('Cantidad', 'Descripción', 'Precio', 'Importe');
		foreach($data_productos as $key => $item){
			$band_head = false;
			if($pdf->GetY() >= $limite_y || $key==0){ //salta de pagina si exede el max
				if($key > 0){
					$this->addPagePDF($pdf);
				}
		
				$pdf->SetFont('Arial','B',8);
				$pdf->SetTextColor(255,255,255);
				$pdf->SetFillColor(160,160,160);
				$pdf->SetX(6);
				$pdf->SetAligns($aligns);
				$pdf->SetWidths($widths);
				$pdf->Row($header, true);
			}
				
			$pdf->SetFont('Arial','',8);
			$pdf->SetTextColor(0,0,0);
				
			$datos = array($item->cantidad, $item->nombre, 
					String::formatoNumero($item->precio_unitario),
					String::formatoNumero($item->importe));
		
			$pdf->SetX(6);
			$pdf->SetAligns($aligns);
			$pdf->SetWidths($widths);
			$pdf->Row($datos, false);
		}
		
		$pdf->SetXY(6, ($pdf->GetY()+10));
		if($pdf->GetY() >= $limite_y)
			$this->addPagePDF($pdf);
		$pdf->Cell(40, 6, "*Estos precios no incluyen IVA", 0, 0, 'L');
		
		$pdf->SetFont('Arial','B',8);
		$pdf->SetX(160);
		if($pdf->GetY() >= $limite_y)
			$this->addPagePDF($pdf);
		$pdf->Cell(45, 6, "Total: ".string::formatoNumero($data_cotiza->subtotal), 0, 0, 'R');
		
		$pdf->SetFont('Arial','',8);
		$pdf->SetXY(6, ($pdf->GetY()+14));
		if($pdf->GetY() >= $limite_y)
			$this->addPagePDF($pdf);
		$pdf->MultiCell(200, 5, "Agradeciendo de antemano la atención se sirvan dar a la presente quedamos a sus ordenes para cualquier aclaración o comentario al respecto y nos permite demostrar nuestro servicio que es nuestra especialidad.", 0, 'L');
		
		$pdf->SetXY(6, ($pdf->GetY()+14));
		if($pdf->GetY() >= $limite_y)
			$this->addPagePDF($pdf);
		$pdf->Cell(200, 6, "ATTE.", 0, 0, 'C');
		
		$pdf->SetXY(6, ($pdf->GetY()+4));
		if($pdf->GetY() >= $limite_y)
			$this->addPagePDF($pdf);
		$pdf->Cell(200, 6, "VÍCTOR HUGO JIMÉNEZ MAGAÑA", 0, 0, 'C');
		
		$pdf->SetXY(6, ($pdf->GetY()+4));
		if($pdf->GetY() >= $limite_y)
			$this->addPagePDF($pdf);
		$pdf->Cell(200, 6, "GERENTE", 0, 0, 'C');
		
		if ($tipo_output=='S')
			return $pdf->Output('cotizacion.pdf', $tipo_output);
		else
			$pdf->Output('cotizacion.pdf', $tipo_output);
	}
	private function addPagePDF(&$pdf){
		$pdf->AddPage();
		if(isset($_GET['membrete']))
			$pdf->Image(APPPATH.'images/h_memb.jpg', .5, 0, 215, 279);
		$pdf->SetY(45);
	}

	public function enviarCotizacion($id, $email=''){

		$res_fac = $this->db->select("*")->from('cotizaciones')->where('id_cotizacion', $id)->get()->row();
		$res_empresa = $this->db->select("*")->from('config')->where('id_config', '1')->get()->row();
		$res_cliente = $this->db->select("*")->from('clientes_sucursales')->where('id_sucursal', $res_fac->id_cliente)->get()->row();

		$res_cliente->email = $email==''? $res_cliente->email: $email;

		$_GET['membrete'] = 'si';

		if($res_cliente->email != ''){
			include(APPPATH."libraries/php_mailer/class.phpmailer.php");

			$tipo_factu = 'Cotización';
			$asunto = 'Ha recibido una COTIZACION de '.$res_empresa->nombre_fiscal;

			$msg_alt = 'Estimado Cliente: '.$res_cliente->nombre_fiscal.'. Usted está recibiendo una cotización ('.($res_fac->serie!=''? $res_fac->serie.'-': '').$res_fac->folio.') de '.$res_empresa->nombre_fiscal;
			$msg_html = '
			<p>Estimado Cliente: <strong>'.$res_cliente->nombre_fiscal.'</strong></p>
			<p>Usted está recibiendo una cotización ('.($res_fac->serie!=''? $res_fac->serie.'-': '').$res_fac->folio.') de '.$res_empresa->nombre_fiscal.'</p>
			';

			$msg_html .= '
				<p>Si usted desea que llegue la cotización a otro correo electronico notifiquelo a: <br>
					'.$res_empresa->email.'</p>
				<p>Si por algun motivo, decea optener nuevamente su cotización puede solicitarla a nuestra oficina al Tel. '.$res_empresa->telefono.'.<br>
				';

			date_default_timezone_set('America/Mexico_City'); //Se define la zona horaria
			#require_once('class.phpmailer.php'); //Incluimos la clase phpmailer

			$mail = new PHPMailer(true); // Declaramos un nuevo correo, el parametro true significa que mostrara excepciones y errores.

			$mail->IsSMTP(); // Se especifica a la clase que se utilizará SMTP

			try {
				//------------------------------------------------------
				$correo_emisor_em = 'redfirecolimafacturacion@gmail.com';
				$correo_emisor="redfirecolimafacturacion@gmail.com";     //Correo a utilizar para autenticarse
				                     //Gmail o de GoogleApps
				$nombre_emisor="Redfire Colima";               //Nombre de quien envía el correo
				$contrasena="r3df1r3f";          //contraseña de tu cuenta en Gmail
				$correo_destino=$res_cliente->email;      //Correo de quien recibe
				$nombre_destino= $res_cliente->nombre_fiscal;               //Nombre de quien recibe
				//--------------------------------------------------------
				$mail->SMTPDebug  = 0;                     // Habilita información SMTP (opcional para pruebas)
				                                         // 1 = errores y mensajes
				                                         // 2 = solo mensajes
				$mail->SMTPAuth   = true;                  // Habilita la autenticación SMTP
				$mail->SMTPSecure = "ssl";                 // Establece el tipo de seguridad SMTP
				$mail->Host       = "smtp.gmail.com";      // Establece Gmail como el servidor SMTP
				$mail->Port       = 465;                   // Establece el puerto del servidor SMTP de Gmail
				$mail->Username   = $correo_emisor;         // Usuario Gmail
				$mail->Password   = $contrasena;           // Contraseña Gmail
				//A que dirección se puede responder el correo
				$mail->AddReplyTo($correo_emisor_em, $nombre_emisor);

				//La direccion a donde mandamos el correo
				$emails = explode(',', $correo_destino);
				foreach ($emails as $key => $value) {
					$value = trim($value);
					if($value != '')
						$mail->AddAddress( $value, $nombre_destino );
				}
				
				// $mail->AddAddress("chonitabananas@hotmail.com", $nombre_destino);
				//De parte de quien es el correo
				$mail->SetFrom($correo_emisor_em, $nombre_emisor);
				//Asunto del correo
				$mail->Subject = $asunto;
				//Mensaje alternativo en caso que el destinatario no pueda abrir correos HTML
				$mail->AltBody = $msg_alt;
				//El cuerpo del mensaje, puede ser con etiquetas HTML
				$mail->MsgHTML($msg_html);
				//Archivos adjuntos
				
        $archivo = $this->imprimirCotizacion($id, 'S');
				$nombre_archivo1 = APPPATH.'/media/cotz'.$res_empresa->rfc.$res_fac->serie.'-'.$res_fac->folio.".pdf";
				file_put_contents($nombre_archivo1, $archivo);
				
				$mail->AddAttachment($nombre_archivo1);      // Archivos Adjuntos
				// $mail->AddAttachment($nombre_archivo2);      // Archivos Adjuntos
				//Enviamos el correo
				$mail->Send();

				unlink($nombre_archivo1);
				return 9;
			} catch (phpmailerException $e) {
				$e->errorMessage(); //Errores de PhpMailer
			} catch (Exception $e) {
				$e->getMessage(); //Errores de cualquier otra cosa.
			}
			return 10;

			/*//Servidor internet
			$correo_emisor_em = 'facturas@chonitabananas.com';
			$nombre_emisor="Chonita Bananas";               //Nombre de quien envía el correo

			$axml = $this->descargarXML(false);	//xml

			$archivo = $this->descargarPDF(true);
			$archivo = chunk_split(base64_encode($archivo));

			$uid = md5(uniqid(time()));
	    $header = "From: CHONITA BANANAS S.P.R. DE R.L. <".$correo_emisor_em.">\r\n";
	    $header .= "Reply-To: ".$correo_emisor_em."\r\n";
	    $header .= "MIME-Version: 1.0\r\n";
	    $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
	    $header .= "This is a multi-part message in MIME format.\r\n";
	    $header .= "--".$uid."\r\n";
	    $header .= "Content-Type: text/html; charset=UTF-8\r\n";
	    $header .= "Content-Transfer-Encoding: 8bit\r\n";
	    $header .= $msg_html."\r\n\r\n";
	    $header .= "--".$uid."\r\n";
	    $header .= "Content-Type: application/pdf; name=\"".$axml[0].".pdf\"\r\n"; // use different content types here
	    $header .= "Content-Transfer-Encoding: base64\r\n";
	    $header .= "Content-Disposition: attachment; filename=\"".$axml[0].".pdf\"\r\n\r\n";
	    $header .= $archivo."\r\n\r\n";
	    $header .= "--".$uid."\r\n";
	    $header .= "Content-Type: text/xml; name=\"".$axml[0].".xml\"\r\n"; // use different content types here
	    $header .= "Content-Transfer-Encoding: base64\r\n";
	    $header .= "Content-Disposition: attachment; filename=\"".$axml[0].".xml\"\r\n\r\n";
	    $header .= chunk_split(base64_encode($axml[1]))."\r\n\r\n";
	    $header .= "--".$uid."--";
			mail($data[0]['email'], $asunto, $msg_html, $header);*/
		}else
			return 11;
	}

}